// 自定義工具文件名稱：  tools public  common core

// aaa({
//     method:'', // 請求方法
// url:'',    // 資源路徑
// params:"", // 查詢參數
// data:''  ,  // 請求體參數
// success: function (res) {} // 處理響應信息,success是自己定義的。
// })


//封裝一個方法，把對象轉換為執行類型的字符串
function objectToString(obj) {
    // for循環遍歷，向數組中添加 a=1 b=2 c=3 這樣的字符串，最後用 join("&")拼接
    let arr = [];
    for (let k in obj) {
        // k代表屬性，obj[k]代表值；
        arr.push(`${k}=${obj[k]}`);
    }
    return arr.join("$")
}

// 封裝一個方法itcast，裏面必須傳遞一個對象類型的參數
//   參數中必須包含以下屬性： method,url,params,data,aaa
function itcast(config) {
    // 1.創建xhr 實例
    const xhr = new XMLHttpRequest();
    // 4.接收，寫到哪裏都可以。
    xhr.addEventListener('load', function () {
        // 把接收到的JSON類型字符串，轉換成對象
        let obj = JSON.parse(xhr.response);
        // 把接收到的數據，交給success處理
        config.success(obj);
    });
    // 判斷只考慮get和post請求：toUpperCase() 轉換大寫;
    //                         toLowerCase() 轉換小寫;
    if (config.method.toUpperCase() == 'GET') {
        // 判斷 config.params 屬性：undefined string  object 
        if (typeof config.params == 'undefined') {
            // 2.設置 - 無參
            xhr.open('GET', config.url);
            // 3.發送
            xhr.send()
        } else if (typeof config.params == 'string') {
            // 2.設置 - 帶參 - 字符串類型在路徑末尾加？鏈接字符串
            xhr.open('GET', config.url + "?" + config.params);
            // 3.發送
            xhr.send()
        } else if (typeof config.params == 'object') {
            // 2.設置 - 帶參- 對象類型需要轉換為字符串，(a=1&b=2&c=3)
            //   自己定義一個方法：objectToString() 把對象類型轉換為a=1&b=2&c=3
            xhr.open('GET', config.url + "?" + objectToString(config.params));
            // 3.發送
            xhr.send()
        }

    } else if (config.method.toUpperCase() == 'POST') {
        // 判斷 config.data 屬性 ：string objject
        if (typeof config.data == 'string') {
            // 2.設置
            xhr.open('POST', config.url);
            // 3.發送 - 字符串類型，需要設置 application/x-www-form-urlencoder
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoder')
            xhr.send(config.data) // 字符串類型，直接發送


            
        } else if (typeof config.data == 'object') {
            // 2.設置
            xhr.open('POST', config.url);
            // 3.發送 - 對象類型，需要設置 application/json
            xhr.setRequestHeader('Content-Type', 'application/json')
            xhr.send(JSON.stringify(config.data))
        }

    }
};